import QtQuick 2.0
import QtGraphicalEffects 1.0
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import "."
import "./components/"
import "../javascript/Utils.js" as UtilsJS

Flickable {
    id: coletaPanel
    contentHeight: column1.height
    anchors.margins: UtilsJS.dp2px(10)
    property string titulo: "Coleta de Preço"
    property var subTitulo: null

    property bool showMenuButton: false
    property string fornecedorId
    property string produtoId
    property var produtoAtual: null

    property string idEmbalagem: "1"
    property alias preco: precoUnitario.value
    property string validade: "2015-01-01"
    property alias promocao: ckbPrecoPromocional.checked
    property alias validadePromocao: dataValidadePromocao.text
    property alias qtdMinima: qtdMinimaPromocao.value
    property alias qtdMaxima: qtdMaximaPromocao.value
    property alias obs: observacaoText.text

    property Calendar calendario: null;

    property Rectangle toolBarMenu: Rectangle {
        width: UtilsJS.dp2px(220)
        height: menuItems.height
        color: "#f3f3f3"

        Column {
            id: menuItems
            width: parent.width

            Button {
                text: "Info"
                style: applicationWindow.botoesDrawer
                width: parent.width
                height: UtilsJS.dp2px(48)
                property string icon: ""
                onClicked: {
                    applicationWindow.hideToolBarMenu();
                    applicationWindow.showPath();
                }
            }

            Button {
                id: btnExcluir
                text: "Excluir"
                style: applicationWindow.botoesDrawer
                width: parent.width
                height: UtilsJS.dp2px(48)
                property string icon: ""
                onClicked: {
                    applicationWindow.hideToolBarMenu();
                    deletarColeta();
                }
            }

            Button {
                text: "Não disponível"
                style: applicationWindow.botoesDrawer
                width: parent.width
                height: UtilsJS.dp2px(48)
                property string icon: ""
                onClicked: {
                    applicationWindow.hideToolBarMenu();
                    marcarNaoDisponivel();
                }
            }
        }
    }

    property var toolBarItem: Button {
        text: "Salvar"
        height: UtilsJS.dp2px(40)
        width: UtilsJS.dp2px(120)

        Component.onCompleted: {
            if(parent) {
                anchors.verticalCenter = parent.verticalCenter;
            }
        }

        onClicked: {
            var precoStr = ""+preco;
            if(precoStr=="0") {
                applicationWindow.showMessage("Preço inválido. O preço dever estar preenchido e deve ser diferente de 0,00.");
            } else {
                salvarColeta(fornecedorId,produtoAtual["id"],idEmbalagem,preco,validade,promocao?"1":"0",validadePromocao.length>0?Qt.formatDate(calendario.selectedDate,"yyyy-MM-dd"):"",qtdMinima,qtdMaxima,"0",obs);
            }
        }
    }

    Column {
        id: column1
        width: parent.width
        anchors.right: parent.right
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.margins: UtilsJS.dp2px(10)
        spacing: UtilsJS.dp2px(10)

        Item {
            id: identificacao
            width: parent.width
            height: cardIdentificacao.height
/*
            DropShadow {
                anchors.fill: cardIdentificacao
                source: cardIdentificacao
                horizontalOffset: 0
                verticalOffset: UtilsJS.dp2px(1)
                radius: UtilsJS.dp2px(3)
                samples: 16
                color: "#20000000"
                transparentBorder: true
            }
*/
            Rectangle {
                id: cardIdentificacao
                width: parent.width
                height: content.height + UtilsJS.dp2px(15)
                color: "white"
                radius: UtilsJS.dp2px(2)

                Column {
                    id: content
                    anchors.right: parent.right
                    anchors.left: parent.left
                    anchors.top: parent.top
                    anchors.margins: UtilsJS.dp2px(6)
                    spacing: UtilsJS.dp2px(6)
                    Text {
                        color: "#555558"
                        text: produtoAtual?produtoAtual["Descricao"]:""
                        font.pixelSize: UtilsJS.dp2px(22)
                    }
                    Rectangle {
                        height: UtilsJS.dp2px(2)
                        width: parent.width
                        color: "#c5c5c5"

                    }
                    Text {
                        color: "#a7a8ab"
                        text: qsTr("Preço Unitário:")
                        font.pixelSize: UtilsJS.dp2px(18)
                    }
                    NumberField {
                        id: precoUnitario
                        inputMethodHints: Qt.ImhFormattedNumbersOnly
                        height: UtilsJS.dp2px(40)
                        font.pixelSize: UtilsJS.dp2px(22)
                        horizontalAlignment: TextInput.AlignRight
                        decimals: 2
                        minimumValue: 0.00
                        maximumValue: 999999.99
                     }
                    CheckBox {
                        id: ckbPrecoPromocional
                        text: qsTr("Preço Promocional")
                        height: UtilsJS.dp2px(40)
                        style: CheckBoxStyle {
                            label: Text {
                                color: "#a7a8ab"
                                text: control.text
                                font.pixelSize: UtilsJS.dp2px(18)
                            }
                        }
                    }
                }
            }
        }

        Item {
            width: parent.width
            height: cardPromocao.height
            visible: ckbPrecoPromocional.checked
/*
            DropShadow {
                anchors.fill: cardPromocao
                source: cardPromocao
                horizontalOffset: 0
                verticalOffset: UtilsJS.dp2px(1)
                radius: UtilsJS.dp2px(3)
                samples: 16
                color: "#20000000"
                transparentBorder: true
            }
*/
            Rectangle {
                id: cardPromocao
                width: parent.width
                height: content2.height + UtilsJS.dp2px(15)
                color: "white"
                radius: UtilsJS.dp2px(2)

                Column {
                    id: content2
                    anchors.right: parent.right
                    anchors.left: parent.left
                    anchors.top: parent.top
                    anchors.margins: UtilsJS.dp2px(6)
                    spacing: UtilsJS.dp2px(6)
                    Text {
                        color: "#555558"
                        text: qsTr("Promoção")
                        font.pixelSize: UtilsJS.dp2px(22)
                    }
                    Rectangle {
                        height: UtilsJS.dp2px(2)
                        width: parent.width
                        color: "#c5c5c5"
                    }
                    Text {
                        color: "#a7a8ab"
                        text: qsTr("Qtd. Mínima:")
                        font.pixelSize: UtilsJS.dp2px(18)
                    }
                    NumberField {
                        id: qtdMinimaPromocao
                        inputMethodHints: Qt.ImhFormattedNumbersOnly
                        height: UtilsJS.dp2px(40)
                        font.pixelSize: UtilsJS.dp2px(22)
                        horizontalAlignment: TextInput.AlignRight
                        decimals: 3
                        minimumValue: 0.00
                        maximumValue: 999999.00
                    }
                    Text {
                        color: "#a7a8ab"
                        text: qsTr("Qtd. Máxima:")
                        font.pixelSize: UtilsJS.dp2px(18)
                    }
                    NumberField {
                        id: qtdMaximaPromocao
                        inputMethodHints: Qt.ImhFormattedNumbersOnly
                        height: UtilsJS.dp2px(40)
                        font.pixelSize: UtilsJS.dp2px(22)
                        horizontalAlignment: TextInput.AlignRight
                        decimals: 3
                        minimumValue: 0.00
                        maximumValue: 999999.00
                    }
                    Text {
                        color: "#a7a8ab"
                        text: qsTr("Validade:")
                        font.pixelSize: UtilsJS.dp2px(18)
                    }
                    Row {
                        spacing: UtilsJS.dp2px(10)
                        TextField {
                            id: dataValidadePromocao
                            inputMethodHints: Qt.ImhDate
                            enabled: false
                            height: UtilsJS.dp2px(40)
                            font.pixelSize: UtilsJS.dp2px(22)
                        }
                        Button {
                            text: "..."
                            onClicked: exibirCalendario()
                            height: dataValidadePromocao.height
                            width: UtilsJS.dp2px(40)
                        }
                    }
                }
            }
        }

        Item {
            id: observacao
            width: parent.width
            height: cardObservacao.height
/*
            DropShadow {
                anchors.fill: cardObservacao
                source: cardObservacao
                horizontalOffset: 0
                verticalOffset: UtilsJS.dp2px(1)
                radius: UtilsJS.dp2px(3)
                samples: 16
                color: "#20000000"
                transparentBorder: true
            }
*/
            Rectangle {
                id: cardObservacao
                width: parent.width
                height: content3.height + UtilsJS.dp2px(15)
                color: "white"
                radius: UtilsJS.dp2px(2)

                Column {
                    id: content3
                    anchors.right: parent.right
                    anchors.left: parent.left
                    anchors.top: parent.top
                    anchors.margins: UtilsJS.dp2px(6)
                    spacing: UtilsJS.dp2px(6)
                    Text {
                        color: "#555558"
                        text: qsTr("Observações:")
                        font.pixelSize: UtilsJS.dp2px(22)
                    }
                    Rectangle {
                        height: UtilsJS.dp2px(2)
                        width: parent.width
                        color: "#c5c5c5"

                    }
                    TextArea {
                        id: observacaoText
                        width: parent.width
                        font.pixelSize: UtilsJS.dp2px(22)
                        height: UtilsJS.dp2px(96)
                    }
                }
            }
        }
    }

    Rectangle {
        id: calendarioContainer
        width: parent.width
        height: parent.parent.height
        color: "#66000000"
        visible: false
        MouseArea {
            width: parent.width;
            height: parent.height;
        }
    }

    function salvarColeta(fornecedorId, produtoId, idEmbalagem, preco, validade, promocao, validadePromocao, qtdMinima, qtdMaxima, indisponivel, obs) {
        console.log("SALVAR: "+fornecedorId+" "+produtoId+" "+idEmbalagem+" "+preco+" "+validade+" "+promocao+" "+validadePromocao+" "+qtdMinima+" "+qtdMaxima+" "+indisponivel+" "+obs);
        coletasController.salvarColetaItem(fornecedorId, produtoId, idEmbalagem, preco,  validade, promocao, validadePromocao,
                                           qtdMinima, qtdMaxima, indisponivel, obs);

        goBack();
    }

    function marcarNaoDisponivel() {
        salvarColeta(fornecedorId,produtoAtual["id"],"0","0","","0","","0","0","1",obs);
    }

    function deletarColeta() {
        coletasController.deletarColetaItem(fornecedorId,produtoAtual["id"]);
        goBack();
    }

    function doUpdate() {
        if(produtoAtual==null) {
            var coletaItem = coletasController.localizaItemColetado(fornecedorId,produtoId);
            if(coletaItem) {
                coletaPanel.preco = coletaItem.Preco;
                coletaPanel.obs = coletaItem.OBS;
                coletaPanel.promocao = (coletaItem.Promocao=="1");
                coletaPanel.qtdMinima = coletaItem.QtdeMinima;
                coletaPanel.qtdMaxima = coletaItem.QtdeMaxima;

                calendario.selectedDate = coletaItem.PromocaoValidade;
                coletaPanel.validadePromocao = Qt.formatDate(coletaItem.PromocaoValidade,"dd/MM/yyyy");

                btnExcluir.enabled = true;
            } else {
                btnExcluir.enabled = false;
            }
        }

        produtoAtual = produtosController.loadDadosProduto(produtoId);

        applicationWindow.detalhePath(produtoAtual["Descricao"]);
    }

    function exibirCalendario() {
        if(coletaPanel.calendario==null) {
            coletaPanel.calendario = Qt.createComponent("qrc:/qml/components/Calendario.qml").createObject(calendarioContainer);
            coletaPanel.calendario.onClickedFunction = function(date) {
                validadePromocao = Qt.formatDate(date,"dd/MM/yyyy");
                esconderCalendario();
            }
        }

        coletaPanel.contentHeight = coletaPanel.calendario.height;
        calendarioContainer.visible=true;
    }

    function esconderCalendario() {
        calendarioContainer.visible=false;
        coletaPanel.contentHeight = column1.height;
    }

    function back() {
        if(calendarioContainer.visible) {
            esconderCalendario();
            return false;
        }

        return true;
    }

}
